package de.ssmp.wbs.daten;

import java.util.ArrayList;

import de.ssmp.wbs.logik.Versionsraummethode;

/**
 * Die Spieler Klasse repräsentiert einen einzelnen Spieler und wird gefüllt mit
 * Torschüssen, welche aus einer CSV-Datei eingelesen werden. Zudem verfügt der
 * Spieler über einen Namen, welcher ihn identifiziert.
 * 
 * @author maximilian
 * @version 1
 * 
 */
public class Spieler {

	/* Attribute */
	private String spielerName;
	private ArrayList<Torschuss> torschuesse;

	private ArrayList<Ergebnis> alErgebnisse;

	/* Constructor */
	public Spieler(String spielerName) {
		this.spielerName = spielerName;
		torschuesse = new ArrayList<Torschuss>();
		alErgebnisse = new ArrayList<Ergebnis>();

	}

	/* Methods */
	/**
	 * Fügt dem Spieler einen neuen Torschuss-Eintrag hinzu.
	 * 
	 * @param torschuss
	 *            Neuer Torschuss (mit Liste von Attributen intern)
	 */
	public void neuerTorschuss(Torschuss torschuss) {
		torschuesse.add(torschuss);
	}

	/**
	 * Entfernt den Torschuss 'index'
	 * 
	 * @param index
	 *            Stelle innerhalb der Torschussliste, welche zu entfernen ist.
	 */
	public void entferneTorschuss(int index) {
		torschuesse.remove(index);
	}

	/**
	 * 
	 * Führt den AQ-Algorithmus durch und gibt eine Liste von Ergebnissen
	 * zurück.
	 * 
	 * @param neuBerechnen
	 *            Wenn 'true' bewirkt dieser Parameter eine erneute durchführung
	 *            des AQ-Algorithmusses, wenn nicht werden die bereits
	 *            ermittelten Ergebnisse für diesen Spieler zurückgegeben.
	 * @return Eine Liste von Ergebnissen wohin der Spieler in welcher Situation
	 *         schießt.
	 */
	public ArrayList<Ergebnis> berechneTorwartzettel(boolean neuBerechnen) {
		if (neuBerechnen) {
			alErgebnisse = Versionsraummethode.work(torschuesse);
		}
		return alErgebnisse;
	}

	/* Overriden methods */
	@Override
	public String toString() {
		String output = "Spielername: " + spielerName + "\n";
		int i = 0;
		for (Torschuss torschuss : torschuesse) {
			output += "" + i + ". Eintrag: " + torschuss.toString() + "\n";
			i++;
		}
		return output;
	}
}
